﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.ssgj
    对称正定矩阵求逆
    参数 a: a[n,n]，对称正定矩阵，返回其逆矩阵。
    参数 n: 
    返回值 等于0表示失败，大于0表示成功。
    */

    public static string drive_ssgj()
    {
        int i, j;
        double[,] a = new double[4, 4]{
            {5.0,7.0,6.0,5.0},
            {7.0,10.0,8.0,7.0},
            {6.0,8.0,10.0,9.0},
            {5.0,7.0,9.0,10.0}
        };

        // 复制A，用于后面验证。
        double[,] b = new double[4, 4];
        for (i = 0; i <= 3; i++)
        {
            for (j = 0; j <= 3; j++)
            {
                b[i, j] = a[i, j];
            }
        }

        string rs = "";
        rs += gl.html_table("Mat A:", a);

        i = gl.ssgj(a, 4);
        if (i < 0) return "error: " + i;

        double[,] c = new double[4, 4];
        gl.tmul(a, 4, 4, b, 4, 4, c);
        rs += gl.html_table("逆矩阵 Mat A-:", b);

        rs += gl.html_table("检验矩阵 Mat C=A*A-:", c);
        return rs;
    }
}
